1. 初识 Linux

1.1. 概述

早在1991年4月,芬兰人Linus Benedict Torvalds仿照 MINIX [1] ,自己设计了一款操作系统内核,并把它放到互联网上供人免费下载。托管Linus代码的工作人员认为这是Linus的MINIX,于是这个操作系统内核就以Linux的名字出现了。

由于Linux是免费的,世界各地的许多计算机爱好者自愿去研究并改进它。但Linux终究只是一个操作系统内核,它还没有应用程序,并不能构成一个完整的操作系统。比Linux更早诞生的GNU计划(1984年,终极目标是完成一套基于自由软件的完整作业操作系统)到1991年已经完成除了操作系统内核之外的大部分软件,其中包括了一个壳程序(shell),C语言程序库以及一个C语言编译器。Linus及其他早期Linux开发人员在Linux操作系统内核之上加入了这些工具,而完成了完整的Linux操作系统。正是由于Linux使用了许多GNU程序,因此我们平时能遇见“GNU/Linux”的说法。

早期的Linux操作系统只有类似DOS的生硬的黑白字符终端界面,在后来的发展中,它实现了1984年麻省理工的研究成果X Windows图形用户接口,从此Linux系统也开始有了漂亮的桌面环境。

发展至今,Linux在全球操作系统中所占比重为1.48%,服务器市场份额已超过20%。

http://file.xinfengit.com/2009/07/2_2009072208444116Lg0Q.jpg

1.2. Linux 历史

在介绍 Linux 的历史前,有必要了解,Linux “Li”中“i”的发音类似于“Minix”中“i”的发音,而“nux”中“u”的发音类似于英文单词“profess”中“o”的发音。依照国际音标应该是[‘linэks]。

1991年4月,芬兰人Linus Benedict Torvalds根据可以在低档机上使用的MINIX设计了一个系统核心Linux_0.01,但没有使用任何MINIX或UNIX的源代码。通过USENET(就是新闻组)宣布这是一个免费的系统,主要在x86电脑上使用,希望大家一起来将它完善,并将源代码放到了芬兰的FTP站点上代人免费下载。本来他想把这个系统称为freax,可是FTP的工作人员认为这是Linus的MINIX,就用Linux这个子目录来存放,于是它就成了“Linux”。这时的Linux只有核心程序,还不能称做是完整的系统,不过由于许多专业用户(主要是程序员)自愿地开发它的应用程序,并借助Internet拿出来让大家一起修改,所以它的周边的程序越来越多,Linux本身也逐渐发展壮大起来。

“Hello everybody out there using minix——I’m doing a (free) operating system”

在1991年的八月,网络上出现了一篇以此为开篇话语的帖子——这是一个芬兰的名为Linus Torvalds的大学生为自己开始写作一个类似minix,可运行在386上的操作系统寻找志同道合的合作伙伴。

1991年10月5日,Linus Torvalds在新闻组comp.os.minix发布了大约有一万行代码的Linux v0.01版本。

到了1992年,大约有1000人在使用Linux,值得一提的是,他们基本上都属于真正意义上的hacker。

1993年,大约有100余名程序员参与了Linux内核代码编写/修改工作,其中核心组由5人组成,此时Linux 0.99的代码有大约有十万行,用户大约有10万左右。

1994年3月,Linux1.0发布,代码量17万行,当时是按照完全自由免费的协议发布,随后正式采用GPL协议。至此, Linux的代码开发进入良性循环。很多系统管理员开始在自己的操作系统环境中尝试Linux,并将修改的代码提交给核心小组。由于拥有了丰富的操作系统 平台,因而 Linux的代码中也充实了对不同硬件系统的支持,大大的提高了跨平台移植性。

1995年,此时的Linux 可在Intel、Digital 以及Sun SPARC处理器上运行了,用户量也超过了50万,相关介绍Linux的Linux Journal杂志也发行了超过10万册之多。

1996年6月,Linux 2.0内核发布,此内核有大约40万行代码,并可以支持多个处理器。此时的Linux 已经进入了实用阶段,全球大约有350万人使用。

1997年夏,大片《泰坦尼克号》在制作特效中使用的160台Alpha图形工作站中,有105台采用了Linux操作系统。

Linux核心程序的著作权归Linus本人所有,其它应用程序归各自的作者所有,但按照GNU授权,任何人都可以采取收费或免费方式来发行Linux,并在符合该授权的规范下做修改。这样就有了一大批的免费程序移植到了Linux上,包括GNU、Emacs、XFree86、Mozilla等经典软件,并且在不断壮大中。由于源代码是公开的,任何一个使用Linux的人在添置了新硬件后都能自己编写驱动程序,所以Linux对新硬件的支持己经超过了许多专业UNIX系统。Linux的成功如果没有Internet是不可能的,因为Linux实际上是世界各地众多程序员共同开发的结果。

现在的Linux经过数次改版(包括核心的升级和周边程序的完善),己经发展成了一个遵循POSIX标准的32/64位多工操作系统。Linux可以兼容大部分的UNIX系统,很多UNIX的程序不需要改动,或者很少的改变就可以运行于Linux环境;内置TCP/IP协议,可以直接连入Internet,作为服务器或者终端使用;内置Java解释器,可直接运行Java源代码;具备程序语言开发、文字编辑和排版、数据库处理等能力;提供X Windows的图形界面;主要用于x86系列的个人电脑,也有其它不同硬件平台的版本,支持现在流行的所有硬件设备。

就性能上来说,它并不弱于Windows甚至UNIX,而且靠仿真程序还可以运行Windows应用程序。它有成千上万的各类应用软件,并不输于Windows的应用软件数量,其中也有商业公司开发的赢利性的软件。最可贵的是:它是一个真正的UNIX系统,可以供专业用户和想学UNIX的人在自己的个人电脑上使用。Linux是一个非常灵活的系统,相对于Windows而言也是一个比较难用的系统,就如同大多数用户用不惯MacOS的单键鼠标一样。想要对Linux轻车熟路,你必须懂得一些相关知识,软、硬件的配置,最好还懂点程序,因为没有人有义务为您提供技术支援,除了和其它用户交流之外,您必须要自己解决问题。当然,如果只是作为日常应用,Linux一样会为您提供完美的操作环境,你所要做的就是改变使用习惯和成见。

早期的操作系统是没有图形界面的,自从Apple于1984年推出System 1.0开始,个人电脑才实现了真正的GUI(Graphics User Interface,图形用户界面),从此电脑变得更加具有亲和力,也理加易于使用。Windows的图形化开始于Windows 3.1/3.2,直到Windows 95的出现才标致着多媒体时间的到来,从此计算机变得能说会唱起来。

Linux始于UNIX,却青出于蓝胜于蓝,同样拥有不俗的图形用户界面,性能更稳定,也更漂亮,可以和世界上曾经出现过的,最美丽的操作系统媲美!不同于现在的XP,Linux的图形界面是基于Console之上的,类似于Windows 95架于DOS之上,Linux下实现图形界面的是X Windows系统(区别于MS的Windows)。

注解

X Windows是一套用于UNIX的具有极大可携性、对彩色掌握的多样性和网络之间的操作透明性的健在式处理窗口系统。它和微软的Windows的工作原理并不相同,不过两者都使用图形界面和窗口技术,从外表看来有那么一点点相似,但又存在着巨大的不同,实际上X Windows的界面更加多样化,也更漂亮,且高效快捷。就Windows对于DOS的地位一样,X Windows一改UNIX/Linux单调的文本介面,提供了一个友善的图形用户界面(GUI)。

Linux的标志和吉祥物是一只名字叫做Tux的企鹅,标志的由来是因为Linus在澳洲时曾被一只动物园里的企鹅咬了一口,便选择了企鹅作为Linux的标志。Linux的注册商标是Linus Torvalds所有的。这是由于在1996年,一个名字叫做William R. Della Croce的律师开始向各个Linux发布商发信,声明他拥有Linux商标的所有权,并且要求各个发布商支付版税,这些发行商集体进行上诉,要求将该注册商标重新分配给 Linus Torvalds。Linus Torvalds 一再声明 Linux 是免费的,他本人可以卖掉,但 Linux 绝不能卖。

images/Linux小企鹅.gif

“谁会牵你的手,走过风风雨雨”这句歌词曾经代表着千万Linuxer的心,如今,这只可爱的小企鹅终于能独挡一面,在IBM、HP、Novell、Oracle等诸多厂商的支持下,迎着风雪傲然前行。

1.3. Linux 理念与哲学

Linux 崇尚开源和自由

商业软件开发与Linux的开发有什么不同?

商用软件的开发有严格的开发规则、严密的文档、版本控制、严格的测试过程等等,源代码秘而不宣。但是,Linux的开发却完全不同,因为它是基于开放 源代码方式,由网上多个自愿开发者协作开发。

初学者往往会对Linux有一些误解或不切实际的期望,为了更有效地使用Linux,初学者应弄懂Linux的设计哲学思想。

商业系统:封闭的思想

对于商业UNIX系统的开发,一般都有严格的质量保证体系、有整套严格的管理体系。对软件的源代码及软件的版本也都有严格的控制。同时有完整的开发文档、bug报告及解决方案等。开发人员不允许随意更改软件的关键代码,也不允许开发人员加入其它特性。不同的开发人员,只负责全系统的一部分或几部分代码的编写。开发人员只对自己编写的代码在发现有错误后才有更改的权利。软件的质量保障部门则通过严格、复杂的测试步骤对系统进行测试,发现并报告软件中的bug,以便开发部门对这些错误进行修改。商业开发中,系统的下一次发行(release)以前,还必须经统计分析,消除一定百分比的错误再发行。总之,商业UNIX系统的开发者所遵循的开发方式是十分复杂的。除此之外,软件开发厂商还必须有大量的证据来说服用户,鼓励用户继续支持他们的操作系统,向用户保证下一个版本的开发工作已准备就绪或正在进行,保证下一个版本的系统将更加稳定、更加功能强大,等等。所以公司总是在收集、统计并分析操作系统的性能。这样看来,开发商业的UNIX系统是一个工作量十分巨大的工程。这也是为什么这类软件的开发总是聚集了成千上万的开发人员、测试人员、文档管理员、系统开发负责人等。

当人们认识到软件的价值后,软件的开发方式就由开放走向封闭。封闭的开发体系使得软件的开发中存在着大量的重复劳动。a公司开发过的软件,b公司可能 会再去开发。不同的开发团队开发出的软件,各有所长,但又各自互不开放源代码。各自所拥有的优势技术无法共享。显然,这种软件开发体制,一方面造成了人 力、物力的巨大浪费;另一方面,最优秀的技术,没有集成到同一种软件中,用户有了a公司软件的某一优秀特性,如果要享用b公司软件的另一优秀特性,怕是很 困难的事。智慧分散,是人类软件业的一大悲哀。

Linux:开放的思想

Linux的开发以技术为导向,不受任何商业因素的限制。Linux的开发方式摒弃了传统商业开发方式的种种弊端,它是一种全开放的、共同协作的开发方式。在这里,软件开发人员,可以充分发挥自己的聪明才智,充分发挥集体的智慧,将最优秀的、最高效的解决方案运用到操作系统中,从而避免了许多不必要的重复劳动。

再者,商业软件的开发以市场为导向,经常是随着市场的变化而变化。开发人员没有自主权,开发什么,怎么开发受市场部门提供的信息而定。这也正好验证了“最流行的,未必是最好的”一句话。想当初的录像机标准之争,最后的定论还不是由市场决定的吗?而今天,人们在使用microsoft的产品时,遇到的是别无选择,真的是别无选择吗?不,这是因为你没有去选择,比Windows 9x/Windowsnt好的操作系统有的是!Linux就比它强好多倍!而且,它是全免费的,你不用花钱就可以享受这一优秀的操作系统,为什么不试一试呢?

也许,有人说使用Windows 9x/Windows NT有完整的使用说明,有微软的技术支持。这实际上不是理由!想一想,Windows NT出现该死的蓝屏时,你从微软件那里得到的支持是什么?再想一想,在Windows 9x/Windows NT出现错误提示窗口时,你从提示的内容中能得到什么?一无所有,你只能耐心地重启动你的计算机,就这样!

在Linux的开发中,你可以摒弃所有在商业软件开发中所采用的模式。这里没有组织开发的概念,没有bug的报告结构,也没有统计分析。Linux的开发,完全是由一群分布在世界各地的自愿者通过Internet协作来开发这一系统的。任何有足够实际知识或技能的人都有机会进行开发或内核的调试、将其它系统中的软件移植到Linux上,也可以制作系统的文档或帮助新的用户使用系统。在Linux的开发过程中,从来没有哪怕是一个组织来负责系统的开发,Linux社区一般是通过各种邮件列表服务、usenet新闻组来联络的。开发过程中产生了一系列的约定,如:任何人如果希望自己的软件代码被正式的内核接受,那他应将自己的代码发送给Linus torvalds。经过他的测试,如果符合要求,他就会将这些代码收入内核中。

Linux的开发基于一个非常开放的模式,自始到终。最近,一系列的新特性和重要的改进已建立。通常来说,每几个月就发行一个新的内核版本,有时候甚至更快,不过这没有什么规律可循,主要取决于内核中bug的数量及修改进度,也取决于用户对新内核测试回馈单的数量。当然,也同Linus这一段时间内的睡眠时间长短相关。

即便系统中还存在着bug,还有一些问题因未发现而没有解决,只要系统显得已较为稳定,它就被认为是一个“稳定”系统,就可发行了。这种系统与其说是 为用户发行的,倒不如说是为开发者而发行的版本。所以,我们经常可以看到开发版(2.x.y,x为奇数)。

为系统增加新的特性、增加新的应用软件,一般情况下是先发行软件的 “Alpha” [2] 版,让用户进行测试。Linux社区是基于Internet发展壮大的,所以软件将被上载到FTP站点上,通过usenet将软件信息传达给每个人。这样,用户及测试者就可以下载这些软件并对其进行测试,软件错误、发现的问题传给作者。

当大多错误被修改之后,软件的测试进入“beta”阶段。这一阶段,软件通常被认为是相当稳定的产品,但是尚不完全。然后将进行“final”阶段:此阶段的软件被认为功能完备、排除了大多数错误。这时,开发者可以向Linus提出请求,将成熟的软件加入到标准内核中或作为内核的一个可选特性加入其中。

软件的这种过程并不是一成不变的,一些人对自己开发的软件自信心相当强,他们认为自己开发出的软件不必经过“Alpha”或测试版就可进入最后阶段。

Linux的全部内核代码都是从头开始编写的,没有借鉴或使用其它系统的代码。自愿开发者们所做的大量工作是移植 sun系统 [3] 下的自由软件,库文件则有的是从头开始写的,有的则是移植过来的。文件系统是完全新开发的,硬件设备的驱动程序当然也是新编写的。

虽然,Linux的开发没有一个专门的组织负责,但这并不等于说开发中没有一个完善的管理方式。这种分布式开发并非如有些人想象会变得混乱,它有自己 的组织体系,开发通常以项目为单位,参与者按照自己的个人专长分别负责项目管理、工作分派、工作进度协调、程序编写、测试等。项目管理中使用了专门的项目 管理软件,它帮助项目管理人员定义职责,跟踪相关工作,进行资源优化,提供调度及储备等。工作流程管理系统还可以有效进行文档管理、版本控制等。

注解

有趣的Linux感悟

  • 就像Linux的进程间不会严重的相互干扰一样,我不该让太多的外界因素影响了自己的本意。
  • 争论并不能解决问题。Linux确实有很多地方需要改善。但这不是说,对别人的无理无据的诬蔑置之不理。
  • 我该做的是通过不断的学习,用能力把Linux变得更好。我该考量的是如何推广Linux以及传播它的哲学思想。
  • 推广Linux,重要的是把它的哲学思想传播开来。
  • Linux哲学,可以引导人正确树立明确的人生目标,使人不迷惘;Linux哲学,可以影响人做每一件事都清清晰晰,不含糊;Linux哲学,可以影响人注重办事的效率,不拖滞;Linux哲学,还可以令人充满对事业的热情,使人热爱生活。
  • 热爱生活的热情,是在知道Linux之前所没有的。Linux让我从迷惘中走出来,是Linux拯救了在绝望边缘的我。我还该感谢附赠Linux光盘的HP公司!
  • 今天,把明确一词刻入心骨!

注解

KISS 原则 ———— KEEP IT SIMPLE , STUPID!

编写只做一件事情,并且要做好的程序;编写可以在一起工作的程序,编写处理文本流的程序,因为这是通用的接口。这就是UNIX哲学。所有的哲学真正的浓缩为一个铁一样的定律,高明的工程师的神圣的“KISS 原则”无处不在。

1.4. Linux 与 GNU

由 Linus Torvalds 及其他人士开发的Linux并不是一个完整的操作系统,而仅仅是一个类UNIX内核。事实上,Linux一开始是以完成Minix内核的功能为目标,Linus想做一个“比Minix更好的Minix”。而GNU计划始于1984年,终极目标是完成一套基于自由软件的完整作业操作系统。到1991年Linux的第一个版本公开发行时,GNU计划已经完成除了操作系统内核之外的大部分软件,其中包括了一个壳程序(shell),C语言程序库以及一个C语言编译器。林纳斯·托瓦兹及其他早期Linux开发人员加入了这些工具,而完成了Linux操作系统。但是尽管Linux是在GNU通用公共许可证下发行,它却不是GNU计划的一部分。

正是由于Linux使用了许多GNU程序,GNU计划以及自由软件基金会(Free Software Foundation)的创立者Richard Stallman认为应该将该操作系统称为“GNU/Linux”比较恰当,这也是为什么我们平时能遇见“GNU/Linux”说法的原因。

1.5. Linux 发行版

好了,经由上面的说明,我们知道 Linux 是个“操作系统”,而且他是 GNU 的授权模式,并且有个老大哥是 UNIX 。不过,毕竟由 Torvalds 先生负责维护的 Linux 提供的仅是“核心”与“核心工具”的集合,对于需要更完整功能的操作系统来说,毕竟还不够完备,例如如果你要桌面程序,还需要加入 X Window 系统。如果你要架设 WWW 还需要加入服务器软件。所以,虽然 Linux 的核心已经提供了相当多的支持与工具程序,但毕竟还不足以构成一个很完整的操作系统。

好在,由于 Linux 的稳定性良好,并且可以在便宜的 x86 架构下的计算机平台运作,所以吸引了很多的套件商与自由软件的开发团队在这个 Linux 的核心上面开发相关的软件,例如有名的 sendmail, wu-FTP, apache 等等。

此外,亦有一些商业公司发现这个商机,因此,这些商业公司或者是非营利性的工作团队,便将 Linux 核心、核心工具与相关的软件集合起来,并加入自己公司或团队的创意的系统管理模块与工具,而释出一套可以完整安装的操作系统,这个完整的 Linux 操作系统,我们就称呼他为发行版,或者是中文所谓的“安装套件”。当然,由于是基于 GNU 的架构下,因此各家公司所发行的光盘套件是可以在网络上面自由下载的。

不过,由于发展的 Linux 公司实在太多了,例如有名的 Red Hat, OpenLinux, Mandrake, Debian, SuSE 等等,所以很多人都很担心,如此一来每个发行版是否都不相同呢?这就不需要担心了,由于各个发行版都是架构在Linux内核下来发展属于自己公司风格的发行版,因此大家都遵守 Linux Standard Base (LSB 的规范),也就是说,各个发行版其实都是差不多的!反正用到的都是Linux内核啊!只是各个发行版里面所使用的各套件可能并不完全相同而已。所以,读者可以按照自己的喜好来选择 Linux 的发行版。

底下列出几个主要的 Linux 发行者网址:

就如同 VBird 前面提到的,每一个发行者所使用的 Linux 核心其实是一样的,都是由 www.kernel.org 开发出来的核心。所以其架构,甚至包括其档案放置的目录,都是大同小异的,基本上除了某些内容套件不太一样之外 ( 例如有人使用 wu-FTPd 有人使用 proFTPd 等等 ,其它的档案架构与指令系统其实几乎都是相同的,因此我们不去探讨哪一个套件比较出色,而是要来介绍如何学习与使用一个套件。至于下载的地点,网友提供了一个相当棒的多种 Linux distributions 的下载网站:<http://www.linuxiso.org>

1.6. 参与Linux内核开发

如果你对Linux内核开发一无所知,你应该访问“Linux内核新手”计划:http://kernelnewbies.org。它拥有一个可以问各种最基本的内核开发问题的邮件列表(在提问之前一定要记得查找已往的邮件,确认是否有人已经回答过相同的问题)。它还拥有一个可以获得实时反馈的IRC聊天频道,以及大量对于学习Linux内核开发相当有帮助的文档。

网站简要介绍了源代码组织结构、子系统划分以及目前正在进行的项目(包括内核中的和单独维护的)。它还提供了一些基本的帮助信息,比如如何编译内核和打补丁。

如果你想加入内核开发社区并协助完成一些任务,却找不到从哪里开始,可以访问“Linux内核房管员”计划:http://kernelnewbies.org/KernelJanitors。这是极佳的起点。它提供一个相对简单的任务列表,列出内核代码中需要被重新整理或者改正的地方。通过和负责这个计划的开发者们一同工作,你会学到将补丁集成进内核的基本原理。如果还没有决定下一步要做什么的话,你还可能会得到方向性的指点。

如果你已经有一些现成的代码想要放到内核中,但是需要一些帮助来使它们拥有正确的格式。请访问“内核导师”计划。这个计划就是用来帮助你完成这个目标的。它是一个邮件列表,地址如下:http://selenic.com/mailman/listinfo/kernel-mentors


[1]Minix的名称取自英语Mini UNIX,是一个迷你版本的类Unix操作系统(约300MB)。
[2]Alpha版本的产品仍然需要完整的功能测试,而其功能亦未完善,但是可以满足一般需求。因为它是整个软件开发周期中的第一个主要阶段,所以它的名称是“Alpha”,希腊字母中的第一个字母。
[3]Sun Microsystems(中国大陆分公司原称作“太阳计算机系统(中国)有限公司”,现为“甲骨文(中国)软件系统有限公司”;台湾分公司原称作“升阳电脑股份有限公司”,现为“美商甲骨文有限公司台湾分公司”)创建于1982年2月24日。主要产品是工作站、服务器和UNIX操作系统。1992年升阳推出了市场上第一台多处理器工作站SPARCstation 10,并于次年进入财富500强。SUN公司的名字是由Stanford University Network缩写而来。